home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / pglocks.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-12  |  1.6 KB  |  87 lines

  1. # include    <ingres.h>
  2. # include    <access.h>
  3. # include    <lock.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)pglocks.c    8.2    6/12/88)
  7.  
  8. struct lockreq    Lock;
  9. /*
  10.  *    setpgl- sets a lock for the access buffer
  11.  */
  12. setpgl(buf)
  13. struct    accbuf    *buf;
  14. {
  15.     register struct accbuf    *b;
  16.     register int        i;
  17.     auto    int    ret_val;
  18.  
  19. #    ifdef xATR1
  20.     if ( tTf(28,2) )
  21.     {
  22.         printf(" setpgl pg=%ld rel", buf->thispage);
  23.         dumptid(&buf->rel_tupid);
  24.     }
  25. #    endif
  26.     if (Alockdes < 0)
  27.         return(1);
  28.     b = buf;
  29.     Lock.lract = A_SLP;    /* wait for lock */
  30.     Lock.lrtype = T_PAGE;    /* page lock */
  31.     Lock.lrmod = M_EXCL;    /* exclusive lock */
  32.     bmove(&b->rel_tupid, Lock.lrel, 4);    /* copy relation id */
  33.     bmove(&b->thispage, Lock.lpage, 4);    /* copy page id */
  34.     ret_val = dolock(&Lock);
  35.     b->bufstatus |= BUF_LOCKED;
  36.     return (ret_val);
  37. }
  38. /*
  39.  *    unlpg- releases a page lock
  40.  */
  41. unlpg(buf)
  42. struct    accbuf    *buf;
  43. {
  44.     register struct    accbuf    *b;
  45.     register int        i;
  46.     auto    int    ret_val;
  47.  
  48. #    ifdef xATR1
  49.     if (tTf(28, 3))
  50.     {
  51.         printf(" unlpg page %ld rel", buf->thispage);
  52.         dumptid(&buf->rel_tupid);
  53.     }
  54. #    endif
  55.     if (Alockdes < 0)
  56.         return(1);
  57.     b = buf;
  58.     Lock.lract = A_RLS1;
  59.     bmove(&b->rel_tupid, Lock.lrel, 4);    /* copy relation id */
  60.     Lock.lrtype = T_PAGE;    /* page lock */
  61.     bmove(&b->thispage, Lock.lpage, 4);    /* copy page id */
  62.     b->bufstatus &= ~BUF_LOCKED;
  63.     ret_val = dolock(&Lock);
  64.     return (ret_val);
  65. }
  66. /*
  67.  *    unlall - release all locks held by this process
  68.  */
  69. unlall()
  70. {
  71.     register int    i;
  72.     auto    int    ret_val;
  73.  
  74.  
  75. #    ifdef xATR1
  76.     if (tTf(28, 6))
  77.         printf(" unlall\n");
  78. #    endif
  79.  
  80.     Acclock = TRUE;    /* reset page lock flag just in case */
  81.     if (Alockdes < 0)
  82.         return(1);
  83.     Lock.lract = A_RLSA;
  84.     ret_val = dolock(&Lock);
  85.     return (ret_val);
  86. }
  87.